GANs (Generative Adversarial Networks) হল একটি অত্যন্ত জনপ্রিয় deep learning আর্কিটেকচার যা generator এবং discriminator নামে দুটি নেটওয়ার্কের সমন্বয়ে কাজ করে। Generator নতুন ডেটা তৈরি করে, যেমন চিত্র, এবং Discriminator সেই ডেটার প্রকৃত (real) অথবা কৃত্রিম (fake) হওয়ার যাচাই করে। GANs সাধারণত চিত্র, ভিডিও, টেক্সট ইত্যাদি তৈরি করার জন্য ব্যবহৃত হয়।
এখানে একটি GAN model ট্রেন এবং ইভালুয়েশন করার পুরো প্রক্রিয়া ব্যাখ্যা করা হয়েছে।
১. GAN মডেল ট্রেনিং প্রক্রিয়া
১.১. Generator এবং Discriminator তৈরি করা
GAN মডেলে দুটি মূল অংশ থাকে:
- Generator: নতুন ডেটা (যেমন ছবি) তৈরি করে।
- Discriminator: চিত্রটিকে প্রকৃত (real) বা কৃত্রিম (fake) হিসেবে শ্রেণীভুক্ত করে।
import tensorflow as tf
from tensorflow.keras import layers
# Generator
def build_generator():
model = tf.keras.Sequential()
model.add(layers.Dense(128, input_dim=100))
model.add(layers.LeakyReLU(alpha=0.2))
model.add(layers.BatchNormalization(momentum=0.8))
model.add(layers.Dense(256))
model.add(layers.LeakyReLU(alpha=0.2))
model.add(layers.BatchNormalization(momentum=0.8))
model.add(layers.Dense(512))
model.add(layers.LeakyReLU(alpha=0.2))
model.add(layers.BatchNormalization(momentum=0.8))
model.add(layers.Dense(1024))
model.add(layers.LeakyReLU(alpha=0.2))
model.add(layers.BatchNormalization(momentum=0.8))
model.add(layers.Dense(28 * 28 * 1, activation='tanh'))
model.add(layers.Reshape((28, 28, 1))) # Assuming image size is 28x28
return model
# Discriminator
def build_discriminator():
model = tf.keras.Sequential()
model.add(layers.Flatten(input_shape=(28, 28, 1))) # Flattening the 2D image to 1D
model.add(layers.Dense(512))
model.add(layers.LeakyReLU(alpha=0.2))
model.add(layers.Dense(256))
model.add(layers.LeakyReLU(alpha=0.2))
model.add(layers.Dense(1, activation='sigmoid')) # Output as binary classification (real or fake)
return model
১.২. GAN কম্পাইল করা
GAN কে প্রশিক্ষণের জন্য আপনি binary crossentropy loss ব্যবহার করতে পারেন, কারণ ডিসক্রিমিনেটর দুটি শ্রেণী (real বা fake) চিহ্নিত করছে।
# Compile the discriminator
discriminator = build_discriminator()
discriminator.compile(loss='binary_crossentropy', optimizer=tf.keras.optimizers.Adam(learning_rate=0.0002, beta_1=0.5), metrics=['accuracy'])
# Compile the combined GAN model (Generator + Discriminator)
generator = build_generator()
discriminator.trainable = False # Freeze discriminator while training the generator
# GAN (combined model)
gan_input = layers.Input(shape=(100,))
x = generator(gan_input)
gan_output = discriminator(x)
gan = tf.keras.models.Model(gan_input, gan_output)
gan.compile(loss='binary_crossentropy', optimizer=tf.keras.optimizers.Adam(learning_rate=0.0002, beta_1=0.5))
১.৩. Generator এবং Discriminator এর Training Loop
প্রতিটি ইপোচে, আমরা প্রথমে Discriminator ট্রেন করি (প্রকৃত এবং কৃত্রিম চিত্র শনাক্ত করার জন্য) এবং তারপরে Generator ট্রেন করি (যাতে এটি আরও ভালো কৃত্রিম চিত্র তৈরি করতে শিখে)। GAN ট্রেনিং প্রক্রিয়া কেবল min-max game হিসেবে কাজ করে, যেখানে Discriminator মডেলটি Generator মডেলটির বিরুদ্ধে কাজ করে
Read more